/**
 * 
 */
package edu.unicen.compilers.actions;

import java.util.ArrayList;

import edu.unicen.compilers.lexicon.LexicalAnalyzer;
import edu.unicen.compilers.parser.Parser;
import edu.unicen.compilers.parser.ParserVal;

/**
 * @author mtrotti
 *
 */
public final class SemanticAction3 extends SemanticAction {
	static int idLength=15;

	public SemanticAction3(LexicalAnalyzer la, Parser parser) {
		super(la, parser);
	}
	/* (non-Javadoc)
	 * @see edu.unicen.compilers.actions.SemanticAction#execute()
	 */
	@Override
	public void execute() {
		String token=this.la.getPartialLexeme();
		ArrayList<String> v=new ArrayList<String>();
		
		if (token.length() > idLength){
			System.out.println("Warning: identificador truncado [" + token + "] en la linea "+ la.getLineNumber());
			token=token.substring(0, idLength);
			
			
		}
		v.add("ID");
		la.setLexeme("_"+token);
		if (token.equalsIgnoreCase("long")){
			la.setLexeme("long");
			la.setToken(TIPO);
			return ;
		}
		if (token.equalsIgnoreCase("function")){
			la.setLexeme("function");
			la.setToken(FUNCTION);
			return ;
		}
		if (token.equalsIgnoreCase("begin")){
			la.setLexeme("begin");
			la.setToken(BEGIN);
			return ;
		}
		if (token.equalsIgnoreCase("end")){
			la.setLexeme("end");
			la.setToken(END);
			return ;
		}
		if (token.equalsIgnoreCase("if")){
			la.setLexeme("if");
			la.setToken(IF);
			return ;
		}
		if (token.equalsIgnoreCase("then")){
			la.setLexeme("then");
			la.setToken(THEN);
			return ;
		}
		if (token.equalsIgnoreCase("else")){
			la.setLexeme("else");
			la.setToken(ELSE);
			return ;
		}
		if (token.equalsIgnoreCase("for")){
			la.setLexeme("for");
			la.setToken(FOR);
			return ;
		}
		if (token.equalsIgnoreCase("RETURN")){
			la.setLexeme("return");
			la.setToken(RETURN);
			return ;
		}
		if (token.equalsIgnoreCase("PRINT")){
			la.setLexeme("PRINT");
			la.setToken(PRINT);
			return ;
		}
		la.putSymbol("_"+token, v);
		la.setToken(ID);
		parser.setYylval(new ParserVal("_"+token));
	}

}
